import router from './index'
import IndexView from '@/views/IndexView' // LayoutView 是架构组件，不在后台返回，在文件里单独引入
import IndexShow from '@/views/IndexShow' // 
import store from '../store';
const _import = require('./_import_development')

let getRouter // 用来获取后台拿到的路由
const whiteList = ['/login', '/404']; // 免登录路由白名单

router.beforeEach((to, from, next) => {
  // console.log('进入路由判断目前拿到的路由表：', from, store.state.userStore.initRoutes)

  if (store.state.userStore.token) { // 已经登陆
    // 判断cookice是否存在 不存在即为未登录
    if (to.path !== '/login') {
      if (store.state.userStore.initRoutes.length) {
        // 获取了动态路由 routes 一定有数据，就无需再次请求 直接放行
        // console.log('完成了动态路由：', router);
        next()
      } else {
        // 没有获取动态路由,就跳转到获取动态路由的方法
        gotoRouter(to, next)
      }
    } else {
      // console.log('您已经登录');
      next('/')
    }
  } else { // 没有登录
    if (whiteList.indexOf(to.path) !== -1) {
      // 免登陆白名单 直接进入
      next()
    } else {
      // if (to.path !== '/login') {
      //   // 重定向到登录页面 不能这么写 因为假如之前的角色是 管理员页面 后又登陆了非管理员 重定向的页面就可能不存在,就会导致404
      //   // next(`/login?redirect=${to.path}`)
      //   next('/login')
      // } else {
      //   next()
      // }
      next('/login')
    }
  }
})

function gotoRouter(to, next) {
  getRouter = JSON.parse(JSON.stringify(store.state.userStore.routes));
  // console.log('获取路由', getRouter);
  // console.log('开始过滤路由');
  getRouter = filterAsyncRouter(getRouter) // 过滤路由
  // console.log('过滤后的路由：', getRouter);
  //将过滤后的路由保存到vuex
  // console.log('将过滤后的路由保存到vuex');
  store.commit('userStore/setInitRoutes', getRouter);

  // console.log('出口i之后的------', getRouter);
  // addRoutesMethods(getRouter)// 动态添加路由
  router.addRoutes(getRouter) // 动态添加路由
  // console.log('动态添加路由成功', router);
  next({ ...to, replace: true })
}

function filterAsyncRouter(asyncRouterMap) { //遍历后台传来的路由字符串，转换为组件对象
  // console.log('过滤',asyncRouterMap);
  const accessedRouters = asyncRouterMap.filter(route => {
    if (route.component) {
      if (route.component === 'IndexView') { // Layout组件特殊处理
        route.component = IndexView
      } else if(route.component == "IndexShow"){
        // console.log('IndexShow', route.MenuID);
        route.component = IndexShow;
      } else {
        route.component = _import(route.component)

      }
    }
    // if (route.generatemenu == 1) {
    //   route.hidden = true;
    // }
    if (route.children && route.children.length) { // 递归函数
      route.children = filterAsyncRouter(route.children)
    }
    return true
  })
  // console.log('过滤完成', accessedRouters);
  return accessedRouters
}


